package com.xhj.mybatis.reflection.wrapper;

import com.xhj.mybatis.reflection.MetaObject;

/**
 * DefaultObjectWrapperFactory
 *
 * @author XJks
 * @description DefaultObjectWrapperFactory 是 MyBatis 默认的对象包装工厂实现。它实现了 ObjectWrapperFactory 接口，但实际上不提供任何包装功能。
 */
public class DefaultObjectWrapperFactory implements ObjectWrapperFactory {

    /**
     * 判断给定对象是否有对应的包装器。
     * 这里始终返回 false，表示默认情况下没有任何对象需要特殊包装。
     *
     * @param object 需要判断的对象
     * @return 总是返回 false
     */
    @Override
    public boolean hasWrapperFor(Object object) {
        return false;
    }

    /**
     * 获取给定对象的包装器。
     * 由于默认实现不支持包装，调用此方法会直接抛出异常。
     *
     * @param metaObject 元对象，MyBatis 用于反射操作的封装对象
     * @param object     需要包装的原始对象
     * @return 不会返回，始终抛出异常
     * @throws RuntimeException 总是抛出，提示不应调用此方法
     */
    @Override
    public ObjectWrapper getWrapperFor(MetaObject metaObject, Object object) {
        throw new RuntimeException("The DefaultObjectWrapperFactory should never be called to provide an ObjectWrapper.");
    }

}
